# 导入tkinter模块，用于创建GUI应用程序
import tkinter as tk
# 导入文件对话框模块，用于打开和保存文件
import tkinter.filedialog as filedialog
# 导入滚动文本框模块，用于显示和编辑文本
import tkinter.scrolledtext as scrolledtext
# 导入颜色选择器模块，用于选择文本颜色
import tkinter.colorchooser as colorchooser

# 定义一个名为Application的类，继承自tk.Frame，用于创建GUI界面
class Application(tk.Frame):
    # 初始化方法，设置主窗口和组件布局
    def __init__(self, master=None):
        super().__init__(master)  # 调用父类的初始化方法
        self.master = master  # 设置主窗口对象
        self.pack()  # 将框架添加到主窗口
        self.createWidgets()  # 创建界面组件

    # 创建界面组件的方法
    def createWidgets(self):
        # 创建一个滚动文本框，设置宽度和高度
        self.textEdit = scrolledtext.ScrolledText(self, width=80, height=20)
        # 将文本框添加到网格布局中，占据第一行和第一列，跨6行
        self.textEdit.grid(row=0, column=0, rowspan=6)

        # 创建一个按钮，设置文本为"打开"，点击时调用funcOpen方法
        self.btnOpen = tk.Button(self, text="打开", command=self.funcOpen)
        # 将按钮添加到网格布局中，占据第一行和第二列
        self.btnOpen.grid(row=0, column=1)

        # 创建一个按钮，设置文本为"保存"，点击时调用funcSave方法
        self.btnSave = tk.Button(self, text="保存", command=self.funcSave)
        # 将按钮添加到网格布局中，占据第二行和第二列
        self.btnSave.grid(row=1, column=1)

        # 创建一个按钮，设置文本为"颜色"，点击时调用funcColor方法
        self.btnColor = tk.Button(self, text="颜色", command=self.funcColor)
        # 将按钮添加到网格布局中，占据第三行和第二列
        self.btnColor.grid(row=2, column=1)

        # 创建一个按钮，设置文本为"退出"，点击时关闭主窗口
        self.btnQuit = tk.Button(self, text="退出", command=self.master.destroy)
        # 将按钮添加到网格布局中，占据第四行和第二列
        self.btnQuit.grid(row=3, column=1)

    # 打开文件的方法
    def funcOpen(self):
        # 弹出文件选择对话框，获取文件路径
        file_path = filedialog.askopenfilename()
        # 如果选择了文件，读取文件内容并显示在文本框中
        if file_path:
            with open(file_path, "r") as file:
                self.textEdit.delete("1.0", tk.END)  # 清空文本框内容
                self.textEdit.insert(tk.INSERT, file.read())  # 插入文件内容

    # 保存文件的方法
    def funcSave(self):
        # 弹出文件保存对话框，获取文件路径
        file_path = filedialog.asksaveasfilename()
        # 如果选择了文件路径，将文本框内容写入文件
        if file_path:
            with open(file_path, "w") as file:
                file.write(self.textEdit.get("1.0", tk.END))  # 获取文本框内容并写入文件

    # 选择颜色的方法
    def funcColor(self):
        # 弹出颜色选择对话框，获取颜色值
        color = colorchooser.askcolor()
        # 如果选择了颜色，将文本框的前景色设置为所选颜色
        if color[1]:
            self.textEdit.config(fg=color[1])  # 设置文本框前景色

# 创建主窗口对象
root = tk.Tk()
# 创建Application对象，传入主窗口对象
app = Application(master=root)
# 进入主事件循环，等待用户操作
root.mainloop()